﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BinhSon.Dao;
using BinhSon.Services.Impl;

namespace BinhSon.Presentation
{
    public partial class ThaoTacMonHoc : UserControl
    {
        private readonly BinhSonServices _bsServices;
        public ThaoTacMonHoc()
        {
            InitializeComponent();
            this._bsServices = new BinhSonServices();
            this.LoadNamHoc();
            this.LoadKhoi();
            this.LoadMonHoc();            
        }

        private void luuButton_Click(object sender, EventArgs e)
        {
            //validate
            if (string.IsNullOrEmpty(tenMonHocTextBox.Text))
            {
                MessageBox.Show("Vui lòng nhập tên môn học");
                return;
            }
            if (string.IsNullOrEmpty(kiHieuMonHocTextBox.Text))
            {
                MessageBox.Show("Vui lòng nhập ký hiệu môn học");
                return;
            }
            //kiem tra mon hoc trung
            if (this._bsServices.CheckExistMonHoc(tenMonHocTextBox.Text))
            {
                var yesNoDialog = MessageBox.Show("Môn học đang tồn tại, bạn có muốn thay đổi không?", "Confirm", MessageBoxButtons.YesNo);
                if (yesNoDialog == DialogResult.Yes)
                {
                    this.ThemMonHoc();
                }
            }
            else
            {
                this.ThemMonHoc();
            }
        }

        private void ThemMonHoc()
        {            
            var monHoc = new MonHoc
            {
                TenMonHoc = tenMonHocTextBox.Text,
                KyHieuMonHoc = kiHieuMonHocTextBox.Text.ToUpper()
            };
            this._bsServices.ThemMonHoc(monHoc);

            //clear value
            tenMonHocTextBox.Text = "";
            kiHieuMonHocTextBox.Text = "";
            this.LoadMonHoc();
        }

        private void capNhatButton_Click(object sender, EventArgs e)
        {
            var selectedKhoi = (ComboBoxModel)khoiComboBox.SelectedItem;
            if (selectedKhoi == null)
            {
                MessageBox.Show("Vui lòng chọn khối");
                return;
            }
            var selectedMonHoc = (ComboBoxModel) tenMonHocComboBox.SelectedItem;
            if (selectedMonHoc == null)
            {
                MessageBox.Show("Vui lòng chọn môn học");
                return;
            }
            if (kt15PhutNumericUpDown.Value <= 0)
            {
                MessageBox.Show("Vui lòng nhập số lần kiểm tra 15 phút lớn hơn 0");
                return;
            }
            if (kt1TietNumericUpDown.Value <= 0)
            {
                MessageBox.Show("Vui lòng nhập số lần kiểm tra 1 tiết lớn hơn 0");
                return;
            }
            if (ktCuoiKyNumericUpDown.Value <= 0)
            {
                MessageBox.Show("Vui lòng nhập số lần kiểm tra cuối kỳ lớn hơn 0");
                return;
            }
            //kiem tra mon hoc cua khoi bi trung
            if (this._bsServices.CheckExistMonHocTheoKhoi(selectedKhoi.Key, selectedMonHoc.Key))
            {
                var yesNoDialog = MessageBox.Show("Môn học của khối đang tồn tại, bạn có muốn thay đổi không?", "Confirm", MessageBoxButtons.YesNo);
                if (yesNoDialog == DialogResult.Yes)
                {
                    this.ThemMonHocCuaKhoi(selectedKhoi, selectedMonHoc);
                }
            }
            else
            {
                this.ThemMonHocCuaKhoi(selectedKhoi, selectedMonHoc);
            }    
        }

        private void ThemMonHocCuaKhoi(ComboBoxModel selectedKhoi, ComboBoxModel selectedMonHoc)
        {
            var monHocKhoi = new MonHocCuaKhoi
            {
                MonHocId = selectedMonHoc.Key,
                KhoiId = selectedKhoi.Key,
                SoLan15Phut = (int)kt15PhutNumericUpDown.Value,
                SoLan1Tiet = (int)kt1TietNumericUpDown.Value,
                SoLanCuoiKy = (int)ktCuoiKyNumericUpDown.Value
            };
            this._bsServices.ThemMonHocCuaKhoi(monHocKhoi);

            //clear value
            khoiComboBox.Text = "";
            khoiComboBox.SelectedItem = null;
            tenMonHocComboBox.Text = "";
            tenMonHocComboBox.SelectedItem = null;
            kt15PhutNumericUpDown.Value = 0;
            kt1TietNumericUpDown.Value = 0;
            ktCuoiKyNumericUpDown.Value = 0;
        }

        private void LoadKhoi()
        {
            var result = this._bsServices.ListKhoi().Select(x => new ComboBoxModel
            {
                Key = x.LookupReference,
                Value = x.Description
            });
            foreach (var comboBoxModel in result)
            {
                khoiComboBox.Items.Add(comboBoxModel);
            }
        }

        private void LoadMonHoc()
        {
            var result = this._bsServices.ListMonHoc().Select(x => new ComboBoxModel
            {
                Key = x.MonHocId,
                Value = x.TenMonHoc
            });
            foreach (var comboBoxModel in result)
            {
                tenMonHocComboBox.Items.Add(comboBoxModel);
            }            
        }

        private void luuNamHocButton_Click(object sender, EventArgs e)
        {
            var selectedNamHoc = (ComboBoxModel) namHocComboBox.SelectedItem;
            if (selectedNamHoc == null)
            {
                MessageBox.Show("Vui lòng chọn năm học");
                return;
            }
            this._bsServices.SaveCurrentYear(selectedNamHoc.Key);
        }

        private void LoadNamHoc()
        {
            var result = this._bsServices.ListNamHoc().Select(x => new ComboBoxModel
            {
                Key = x.NamHocId,
                Value = x.TenNamHoc
            });
            foreach (var comboBoxModel in result)
            {
                namHocComboBox.Items.Add(comboBoxModel);
            }
            var currentYear = this._bsServices.GetCurrentYear();
            if (currentYear != null)
            {
                namHocComboBox.Text = currentYear.TenNamHoc;
            }
        }

        private void ValidateAndChangeValueForSelectedItem()
        {
            var selectedKhoi = (ComboBoxModel)khoiComboBox.SelectedItem;
            var selectedMonHoc = (ComboBoxModel)tenMonHocComboBox.SelectedItem;            
            if (selectedKhoi == null)
            {
                this.SetValueToZero();
                return;
            }
            if (selectedMonHoc == null)
            {
                this.SetValueToZero();
                return;
            }
            if (!this._bsServices.CheckExistMonHocTheoKhoi(selectedKhoi.Key, selectedMonHoc.Key))
            {
                this.SetValueToZero();
                return;
            }
            //get value for mon hoc cua khoi
            var mhck = this._bsServices.GetMonHocCuaKhoi(selectedKhoi.Key, selectedMonHoc.Key);
            kt15PhutNumericUpDown.Value = mhck.SoLan15Phut;
            kt1TietNumericUpDown.Value = mhck.SoLan1Tiet;
            ktCuoiKyNumericUpDown.Value = mhck.SoLanCuoiKy;            
        }

        private void SetValueToZero()
        {
            kt15PhutNumericUpDown.Value = 0;
            kt1TietNumericUpDown.Value = 0;
            ktCuoiKyNumericUpDown.Value = 0;
        }

        private void tenMonHocComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.ValidateAndChangeValueForSelectedItem();
        }

        private void khoiComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.ValidateAndChangeValueForSelectedItem();
        }
    }
}
